@ExceptionHandler এবং ControllerAdvice এর মাধ্যমে Exception Handling

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Exception Handling এবং Logging
159

স্প্রিং বুট অ্যাপ্লিকেশনে Exception Handling একটি গুরুত্বপূর্ণ ধারণা, যা অ্যাপ্লিকেশনের ভিতরের ত্রুটি বা সমস্যা সঠিকভাবে পরিচালনা করতে সহায়ক। স্প্রিং ফ্রেমওয়ার্কে, @ExceptionHandler এবং @ControllerAdvice ব্যবহার করে আপনি সহজেই ত্রুটির মোকাবিলা এবং কাস্টম ত্রুটি মেসেজ প্রদান করতে পারেন। এই দুটি টুল স্প্রিং MVC-এর মাধ্যমে কার্যকরীভাবে ত্রুটি পরিচালনা করতে ব্যবহৃত হয়।


@ExceptionHandler

@ExceptionHandler একটি স্প্রিং অ্যানোটেশন যা নির্দিষ্ট একটি এক্সেপশন টাইপের জন্য মেথডের মাধ্যমে এক্সেপশন হ্যান্ডলিং করে। এটি সাধারণত Controller ক্লাসের মধ্যে ব্যবহৃত হয় এবং নির্দিষ্ট এক্সেপশন ঘটলে ত্রুটি মেসেজ বা কাস্টম রেসপন্স রিটার্ন করে।

উদাহরণ:

ধরা যাক আমাদের একটি ProductController ক্লাস আছে, যেখানে কিছু ডেটাবেস সম্পর্কিত এক্সেপশন ঘটতে পারে। এই ধরনের এক্সেপশন হ্যান্ডল করার জন্য @ExceptionHandler ব্যবহার করা যায়।

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @GetMapping("/products")
    public String getProducts() {
        // একটি ইচ্ছাকৃত এক্সেপশন উদাহরণ হিসেবে
        throw new ProductNotFoundException("Product not found");
    }

    @ExceptionHandler(ProductNotFoundException.class)
    public String handleProductNotFoundException(ProductNotFoundException ex) {
        return ex.getMessage(); // কাস্টম এক্সেপশন মেসেজ
    }
}

এখানে, ProductNotFoundException নামক কাস্টম এক্সেপশন তৈরি করা হয়েছে এবং @ExceptionHandler দ্বারা এই এক্সেপশনটি ক্যাচ করে একটি মেসেজ রিটার্ন করা হয়েছে।

Custom Exception class:

public class ProductNotFoundException extends RuntimeException {
    public ProductNotFoundException(String message) {
        super(message);
    }
}

এখন, যখন /products URL এ কেউ রিকোয়েস্ট পাঠাবে এবং ProductNotFoundException ঘটবে, তখন handleProductNotFoundException মেথডটি ক্যাচ করবে এবং কাস্টম মেসেজ দেখাবে।


@ControllerAdvice

@ControllerAdvice একটি গ্লোবাল এক্সেপশন হ্যান্ডলার হিসেবে কাজ করে যা সারা অ্যাপ্লিকেশনে যে কোনও কন্ট্রোলারের মধ্যে এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহার করা যেতে পারে। এটি সাধারণত এক্সেপশন হ্যান্ডলিংয়ের জন্য একটি সেন্ট্রাল পয়েন্ট হিসেবে কাজ করে।

উদাহরণ:

ধরা যাক, আমরা একটি কাস্টম এক্সেপশন হ্যান্ডলিং ক্লাস তৈরি করতে চাই যা সমস্ত কন্ট্রোলারের জন্য এক্সেপশন হ্যান্ডল করবে।

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ProductNotFoundException.class)
    public ResponseEntity<String> handleProductNotFoundException(ProductNotFoundException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception ex) {
        return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

এখানে, @ControllerAdvice অ্যানোটেশন ব্যবহার করে আমরা একটি গ্লোবাল এক্সেপশন হ্যান্ডলার তৈরি করেছি যা পুরো অ্যাপ্লিকেশনে যেকোনো ProductNotFoundException বা সাধারণ Exception ক্যাচ করবে। এই ক্ষেত্রে, @ExceptionHandler ব্যবহৃত হয়েছে একটি বিশেষ এক্সেপশন ধরার জন্য।

ProductNotFoundException class:

public class ProductNotFoundException extends RuntimeException {
    public ProductNotFoundException(String message) {
        super(message);
    }
}

এখন, যেকোনো কন্ট্রোলার, যেমন ProductController বা অন্য কোনো কন্ট্রোলারে যদি ProductNotFoundException ঘটতে থাকে, তাহলে এই গ্লোবাল এক্সেপশন হ্যান্ডলারটি সেই এক্সেপশনটি হ্যান্ডল করবে এবং একটি কাস্টম রেসপন্স প্রদান করবে।


@ExceptionHandler এবং @ControllerAdvice এর তুলনা

বৈশিষ্ট্য@ExceptionHandler@ControllerAdvice
ব্যবহারকেবল নির্দিষ্ট কন্ট্রোলারে এক্সেপশন হ্যান্ডল করার জন্যগ্লোবাল এক্সেপশন হ্যান্ডলিং, সারা অ্যাপ্লিকেশন জুড়ে
অ্যানোটেশন ব্যবহারকন্ট্রোলার মেথডে ব্যবহৃতপুরো অ্যাপ্লিকেশন জুড়ে ব্যবহৃত
এক্সেপশন হ্যান্ডলিংএকটি নির্দিষ্ট এক্সেপশন টাইপ হ্যান্ডল করতে ব্যবহৃতএকাধিক কন্ট্রোলার এবং এক্সেপশন হ্যান্ডলিং করতে ব্যবহৃত
ব্যবহারযোগ্যতাযখন শুধুমাত্র নির্দিষ্ট কন্ট্রোলারের জন্য এক্সেপশন হ্যান্ডল করতে হয়যখন সেন্ট্রালাইজড এক্সেপশন হ্যান্ডলিং প্রয়োজন হয়

সারসংক্ষেপ

  • @ExceptionHandler এবং @ControllerAdvice স্প্রিং বুটের মধ্যে এক্সেপশন হ্যান্ডলিংয়ের দুটি গুরুত্বপূর্ণ কৌশল।
  • @ExceptionHandler ব্যবহার করে আপনি প্রতিটি কন্ট্রোলারে নির্দিষ্ট এক্সেপশন হ্যান্ডল করতে পারেন, যেখানে @ControllerAdvice গ্লোবাল এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়।
  • @ControllerAdvice হল একটি সেন্ট্রাল পয়েন্ট যা অ্যাপ্লিকেশনের যেকোনো কন্ট্রোলারের জন্য এক্সেপশন হ্যান্ডলিং পরিচালনা করে। এটি বড় অ্যাপ্লিকেশনে এক্সেপশন হ্যান্ডলিংকে আরও সহজ এবং পরিষ্কার করে।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...